#include <stdio.h>
#define TRUE 1
#define FALSE 0
#define OK 1 
#define ERROR 0
#define INFEASIBLE -1
#define OVERFLOW -2
#define MAXSIZE 100
typedef int Status;
typedef int ElemType;
typedef struct
{
    ElemType data;
    int cur;
}component, SLinkList[MAXSIZE];
// p32 algorithm 2.13
int LocateElem_SL(SLinkList S, ElemType e)
{
    int i = S[0].cur;
    while (i && S[i].data != e)
        i = S[i].cur;
    return i;
}
// p33 algorithm 2.14
void InitSpace_SL(SLinkList &space)
{
    for (int i = 0; i < MAXSIZE - 1; ++i)
        space[i].cur = i+1;
    space[MAXSIZE-1].cur = 0;
}
// p33 algorithm 2.15
int Malloc_SL(SLinkList &space)
{
    int i = space[0].cur;
    if (i)
        space[0].cur = space[i].cur;
    return i;
}
// p33 algorithm 2.16
void Free_SL(SLinkList &space, int k)
{
    space[k].cur = space[0].cur;
    space[0].cur = k;
}
// p34 algorithm 2.17
void difference(SLinkList &space, int &S)
{
    InitSpace_SL(space);
    S = Malloc_SL(space);
    int r = S;  // r为已分配空间的最后元素相对地址
    int m, n;   // m,n为setA,B元素个数
    scanf("%d%d", &m, &n);
    for (int j = 0; j < m; ++j)
    {
        int i = Malloc_SL(space);
        scanf("%d", &space[i].data);
        space[r].cur = i;
        r = i;
    }
    space[r].cur = 0;   // setA数据收集完毕，尾结点指针域设为0
    for (int j = 0; j < n; ++j)
    {
        ElemType b;
        scanf("%d", &b);
        int p = S;   // 前一个元素地址，删除节点时用到
        int k = space[S].cur;  // 当前元素地址
        while (k != space[r].cur && space[k].data != b)
        {
            p = k;
            k = space[k].cur;
        }
        if (k == space[r].cur) // while结束后发现没有重复元素
        {
            int i = Malloc_SL(space);
            space[i].data = b;
            space[i].cur = space[r].cur;
            space[r].cur = i;
        }
        else  // while循环中发现重合元素
        {
            space[p].cur = space[k].cur;
            Free_SL(space, k);
            if (r == k)  // 如果删除setA尾结点，需要更新r（尾结点地址）
                r = p;
        }
    }
}
int main(void)
{

    return 0;
}